#!/bin/sh

# hohos2 CLI tool version 2.6

# Set path variable
script_path=$(realpath "$0")
script_dir=$(dirname "$script_path")

# About the interface
show_about() {
echo "
\033[0;1;31;91m▄\033[0;1;33;93m▄\033[0m    \033[0;1;36;96m▄\033[0;1;34;94m▄\033[0m    \033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄\033[0m    \033[0;1;34;94m▄\033[0;1;35;95m▄\033[0m    \033[0;1;33;93m▄\033[0;1;32;92m▄\033[0m    \033[0;1;34;94m▄\033[0;1;35;95m▄▄\033[0;1;31;91m▄\033[0m   
\033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m   \033[0;1;33;93m██\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m   \033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m   \033[0;1;35;95m██\033[0;1;31;91m▀▀\033[0;1;33;93m██\033[0m  
\033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m  \033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m 
\033[0;1;36;96m█\033[0;1;34;94m██\033[0;1;35;95m██\033[0;1;31;91m██\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m██\033[0;1;36;96m██\033[0;1;34;94m██\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m 
\033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m█\033[0;1;32;92m█\033[0m  \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m 
\033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m   \033[0;1;35;95m██\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m   \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m   \033[0;1;36;96m██\033[0;1;34;94m▄▄\033[0;1;35;95m██\033[0m  
\033[0;1;31;91m▀\033[0;1;33;93m▀\033[0m    \033[0;1;36;96m▀\033[0;1;34;94m▀\033[0m    \033[0;1;31;91m▀\033[0;1;33;93m▀▀\033[0;1;32;92m▀\033[0m    \033[0;1;34;94m▀\033[0;1;35;95m▀\033[0m    \033[0;1;33;93m▀\033[0;1;32;92m▀\033[0m    \033[0;1;34;94m▀\033[0;1;35;95m▀▀\033[0;1;31;91m▀\033[0m
"
echo "
\033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄▄\033[0m     \033[0;1;35;95m▄\033[0;1;31;91m▄▄\033[0;1;33;93m▄▄\033[0m       \033[0;1;35;95m▄\033[0;1;31;91m▄▄\033[0;1;33;93m▄\033[0m      \033[0;1;34;94m▄\033[0;1;35;95m▄▄\033[0;1;31;91m▄\033[0m               \033[0;1;32;92m▄▄\033[0;1;36;96m▄▄\033[0;1;34;94m▄\033[0m                \033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄\033[0m   
\033[0;1;33;93m█\033[0;1;32;92m█▀\033[0;1;36;96m▀▀\033[0;1;34;94m██\033[0m   \033[0;1;31;91m█\033[0;1;33;93m█▀\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m    \033[0;1;31;91m██\033[0;1;33;93m▀▀\033[0;1;32;92m██\033[0m   \033[0;1;34;94m▄\033[0;1;35;95m█▀\033[0;1;31;91m▀▀\033[0;1;33;93m▀█\033[0m             \033[0;1;32;92m█\033[0;1;36;96m▀▀\033[0;1;34;94m▀▀\033[0;1;35;95m██\033[0;1;31;91m▄\033[0m             \033[0;1;33;93m██\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m  
\033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m  \033[0;1;35;95m█\033[0;1;31;91m█▄\033[0m                       \033[0;1;31;91m█\033[0;1;33;93m█\033[0m            \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m 
\033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m▀█\033[0;1;32;92m██\033[0;1;36;96m█▄\033[0m                 \033[0;1;31;91m▄\033[0;1;33;93m█▀\033[0m             \033[0;1;32;92m█\033[0;1;36;96m█\033[0m \033[0;1;34;94m██\033[0m \033[0;1;35;95m█\033[0;1;31;91m█\033[0m 
\033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m█\033[0;1;32;92m█\033[0m  \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m       \033[0;1;34;94m▀█\033[0;1;35;95m█\033[0m              \033[0;1;31;91m▄\033[0;1;33;93m█▀\033[0m               \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m 
\033[0;1;35;95m█\033[0;1;31;91m█▄\033[0;1;33;93m▄▄\033[0;1;32;92m██\033[0m   \033[0;1;34;94m█\033[0;1;35;95m█▄\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m    \033[0;1;34;94m██\033[0;1;35;95m▄▄\033[0;1;31;91m██\033[0m   \033[0;1;32;92m█\033[0;1;36;96m▄▄\033[0;1;34;94m▄▄\033[0;1;35;95m▄█\033[0;1;31;91m▀\033[0m            \033[0;1;31;91m▄\033[0;1;33;93m██\033[0;1;32;92m▄▄\033[0;1;36;96m▄▄\033[0;1;34;94m▄\033[0m     \033[0;1;33;93m██\033[0m      \033[0;1;35;95m██\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m  
\033[0m
"
echo "\033[1;34;40m[*]hoho_ddos2 hohos2 CUI tool"
echo "\033[1;32;40m[*]Welcome to hoho_ddos2.0, a network hacker's tool for initiating DDOS attacks, featuring various types and methods of DDOS attacks. More DDOS methods will be updated in the future."
echo "\033[1;37;40m
 --------------------------------------
|             Project Open Source       |
|https://github.com/sansjtw/hoho_ddos2  |
|https://gitee.com/sansjtw/hoho_ddos2   |
|                                       |
|             Blog Website              |
|http://dvrs3.osxo.cn/bb                |
|http://dvrss.ouuq.cn/f4                |
|                                       |
 --------------------------------------
"
echo "\033[1;31;40m[-]Please do not use for illegal purposes."
echo "\033[1;37;40m"
}

# Function to display help
show_help() {
show_about
    cat << EOF
Usage: hohos2 [OPTIONS]

Options:
  -h, --help           Show help for the tool or parameter
  -v, --version        Show the version of hohos2 tool
  -la, --language      Set the language (en or cn). Default is en
  -t, --type           Set the attack type (required)
  -m, --method         Set the attack method (required)

Attack Types:
  Flood_attack = FLA
  Other_attack = OTA
  Protocol_specific_attack = PRSA
  Server_attack = SEA
  Slow_Attack = SLA
  ipv6_attack = IP6A

Example:
  hohos2 -la cn -t FLA -m HTTP_Flood
EOF
}

# Function to display version
show_version() {
    echo "hoho_ddos2 hohos2 version 2.6"
}

# Function to display type options
show_type_help() {
    cat << EOF
Function:
  Set the attack type

Usage:
  -t <Attack type>

Options:
  Flood_attack
  Other_attack
  Protocol_specific_attack
  Server_attack
  Slow_Attack
  ipv6_attack

Option Shortcuts:
  Flood_attack = FLA
  Other_attack = OTA
  Protocol_specific_attack = PRSA
  Server_attack = SEA
  Slow_Attack = SLA
  ipv6_attack = IP6A
EOF
}

# Function to display method options for a specific type
show_method_help() {
    local type=$1
    echo "Function:"
    echo "  Set the attack method for type $type"
    echo
    echo "Usage:"
    echo "  -m <Attack method>"
    echo
    echo "Options:"
    case $type in
        Flood_attack)
            echo "  ACK_Flood"
            echo "  Advanced_DNS_Query_Flood"
            echo "  Advanced_HTTP_Flooding"
            echo "  Advanced_ICMP_Flooding"
            echo "  Advanced_IP_Flooding"
            echo "  Advanced_SYN_Flood"
            echo "  Advanced_UDP_Reflection_Flood"
            echo "  Connection_Flood"
            echo "  DNS_Query_Flood"
            echo "  HTTP_Flood"
            echo "  HTTP_Flood_AMT"
            echo "  ICMP_Flood"
            echo "  IP_lood"
            echo "  Ntp_Request_Flood"
            echo "  SYN_Flood"
            echo "  UDP_Flood_AMT"
            echo "  UDP_Reflection_Flood"
            ;;
        Other_attack)
            echo "  DNS_Amplification"
            echo "  RUDY_Attack"
            echo "  Replay_Attack"
            echo "  Sip_Register_Flood"
            echo "  Sip_lnvite_Flood"
            echo "  Smurf_attack"
            ;;
        Protocol_specific_attack)
            echo "  Minecraft_Protocol_Attacks"
            echo "  SSDP_attack"
            ;;
        Server_attack)
            echo "  Cache_Server_Attack"
            echo "  Minecraft_server_DDoS"
            echo "  translation_server_ddos"
            ;;
        Slow_Attack)
            echo "  Slow_DNS_attack"
            echo "  Slow_GET_attack"
            echo "  Slow_POST_attack"
            echo "  Slow_Read_attack"
            echo "  Slow_SSL_attack"
            echo "  Slowloris_attack"
            echo "  slow_write_attack"
            ;;
        ipv6_attack)
            echo "  ICMPv6_Flood"
            echo "  IPv6_Flood_Attack"
            echo "  IPv6_Fragmentation_Attack"
            echo "  IPv6_ND"
            echo "  IPv6_Replay_Attack"
            echo "  IPv6_SLAAC_Flood"
            echo "  Neighbor_Cache_Exhaustion"
            ;;
        *)
            echo "Unknown type: $type"
            ;;
    esac
}

# Parse command line arguments
LANGUAGE="en"
ATTACK_TYPE=""
METHOD=""
HELP_TYPE=""

while [ "$#" -gt 0 ]; do
    case "$1" in
        -h|--help)
            HELP_TYPE="help"
            shift
            ;;
        -v|--version)
            show_version
            exit 0
            ;;
        -p|--path)
            show_path
            exit 0
            ;;
        -la|--language)
            LANGUAGE="$2"
            shift 2
            ;;
        -t|--type)
            if [ "$2" = "-h" ]; then
                show_type_help
                exit 0
            else
                case "$2" in
                    FLA) ATTACK_TYPE="Flood_attack";;
                    OTA) ATTACK_TYPE="Other_attack";;
                    PRSA) ATTACK_TYPE="Protocol_specific_attack";;
                    SEA) ATTACK_TYPE="Server_attack";;
                    SLA) ATTACK_TYPE="Slow_Attack";;
                    IP6A) ATTACK_TYPE="ipv6_attack";;
                    *) ATTACK_TYPE="$2";;
                esac
                shift 2
            fi
            ;;
        -m|--method)
            if [ "$2" = "-h" ]; then
                show_method_help $ATTACK_TYPE
                exit 0
            else
                METHOD="$2"
                shift 2
            fi
            ;;
        *)
            echo "Unknown option: $1"
            show_help
            exit 1
            ;;
    esac
done

if [ "$HELP_TYPE" = "help" ]; then
    show_help
    exit 0
fi

if [ -z "$ATTACK_TYPE" ] || [ -z "$METHOD" ]; then
    echo "Error: -t and -m options are required"
    show_help
    exit 1
fi

if [ "$LANGUAGE" = "cn" ]; then
    BASE_DIR="ddos_cn"
else
    BASE_DIR="ddos"
fi

COMMAND="python3 $script_dir/$BASE_DIR/$ATTACK_TYPE/${METHOD}.py"
echo "Start running"
$COMMAND

# ©sansjtw https://gitee.com/sansjtw/
# https://sansjtw.netlify.app/
# hoho_ddos2 hohos2